'''
    线程，有时被称为轻量进程(LightweightProcess，LWP)，是程序执行流的最小单元。
一个标准的线程由线程ID，当前指令指针(PC)，寄存器集合和堆栈组成。
另外，线程是进程中的一个实体，是被系统独立调度和分派的基本单位，线程自己不拥有系统资源，只拥有一点儿在运行中必不可少的资源，
但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程，同一进程中的多个线程之间可以并发执行。
由于线程之间的相互制约，致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。
就绪状态是指线程具备运行的所有条件，逻辑上可以运行，在等待处理机:运行状态是指线程占有处理机正在运行;
阻塞状态是指线程在等待一个事件(如某个信号量)，逻辑上不可执行。每一个程序都至少有个线程，若程序只有一个线程，那就是程序本身。
    线程是程序中一个单一的顺序控制流程。进程内有一个相对独立的、可调度的执行单元，是系统独立调度和分派CPU的基本单位指令运行时的程序的调度单位。
在单个程序中同时运行多个线程完成不同的工作，称为多线程

优点:
1.使用线程可以把占据长时间的程序中的任务放到后台去处理，
2.用户界面可以更加吸引人，这样比如用户点击了一个按钮去触发某些事件的处理，可以弹出一个进度条来显示处理的进度
3.程序的运行速度可能加快
4.在一些等待的任务实现上如用户输入、文件读写和网络收发数据等，线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。
'''
import threading

'''
进程：Process
线程：Thread
    t = threading.Thread(target=download,name='aa',args=(1,))
    t.start()
    线程：新建 就绪 运行 阻塞 结束
'''
from time import sleep

def download(n):
    images = ['a.jpg','b.jpg','c.jpg','d.jpg','e.jpg']
    for image in images:
        print('正在下载图片:',image)
        sleep(n)
        print('下载{}成功'.format(image))

def listenMusic():
    musics = ['年轮','小幸运','追光者','告白气球','稻香']
    for music in musics:
        sleep(0.5)
        print('正在听{}歌!'.format(music))

if __name__ == '__main__':
    # 线程对象
    t = threading.Thread(target=download,name='aa',args=(1,))
    t.start()

    t1 = threading.Thread(target=listenMusic,name='bb')
    t1.start()

    n = 1
    while True:
        print('主线程执行',n)
        sleep(1.5)
        n += 1







